Модуль:Крафт
Модуль для создания таблиц с рецептами для крафта. local p = {} local slot = require( Модуль:Инвентарный слот ) local getParts = slot.getParts local prefixes = slot.prefixes -- Сервисная функция local function prefixedLink( name, mod ) local prefix = '' for _, thisPrefix in pairs( prefixes ) do if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then prefix = thisPrefix .. ' ' name = mw.ustring.gsub(name, '^' .. prefix, '' ) break end end local page = '' if mod and mod ~= '' then local ucfirstName = mw.ustring.upper(mw.ustring.sub(name, 1, 1)) .. mw.ustring.sub(name, 2) return prefix .. '' .. name .. '' else return prefix .. '' .. name .. '' end end -- Строительство таблицы function p.table( f ) local args = f if f mw.getCurrentFrame() then args = require( 'Модуль:ProcessArgs' ).merge() else f = mw.getCurrentFrame() end -- Начинать таблицу при необходимости local multirow = f:callParserFunction( '#dplvar', 'multirow' ) if multirow ~= '1' then multirow = nil end local head = args"глава" or '' if multirow then head = '' elseif head ~= '' then multirow = 1 f:callParserFunction( '#dplvar:set', 'multirow', '1' ) else head = 1 end -- Заканчивать таблицу при необходимости local foot = args"подвал" or '' if multirow then if foot ~= '' then multirow = nil f:callParserFunction( '#dplvar:set', 'multirow', '0' ) end else foot = 1 end local header = '' if head ~= '' then local name = '' local description = '' if args"показатьимя" '1' or multirow and args"показатьимя" ~= '0' then name = '!! Результат' f:callParserFunction( '#dplvar:set', 'resultname', '1' ) end if args"показатьописание" '1' then description = ' !! class="unsortable" | Описание' f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' ) end local class = args"класс" or '' local recipeClass = '' if multirow then class = 'sortable collapsible ' .. class recipeClass = 'class="unsortable" |' end local table_head if args"глава" '2' then table_head = '|-' else table_head = ' ' f:callParserFunction( '#dplvar:set', 'resultname', '0', 'craftingdescription', '0' ) end -- Создание различных категорий для DPL local title = mw.title.getCurrentTitle() local categories = '' local makecat = true if args"некат" '1' then makecat = false end if title.namespace ~= 0 then makecat = false end if title.isSubpage then if title.subpageText ~= "крафт" then makecat = false end else if mw.title.new(title.fullText ..'/крафт').exists then makecat = false end end if makecat then categories = {} if args"запланированное" then table.insert( categories, 'Категория:Запланированные материалы' ) end if args"тип" then table.insert( categories, '[.. args["тип" .. ']]' ) end if args"игнорировать" ~= '1' then local dyes = { 'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель', 'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель', 'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок' } -- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия: local variants = { 'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть', 'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка', 'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит', 'ящик шалкера' } for k, v in ipairs( ingredientKeys ) do v = mw.ustring.sub(v, 2 ) if not mw.ustring.find(v, ':' ) then if v 'Любой краситель' or v 'Любой цветной краситель' then if v 'Любой краситель' then table.insert( dyes, 1, 'Костная мука' ) end for _, dye in ipairs( dyes ) do -- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится -- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно -- было быть в винительном падеже, но на данный момент быстро склонять название предметов -- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве -- перевода используется близкая по смыслу конструкция, не требующая склонения. table.insert( categories, 'Категория:' .. dye .. ' как ингредиент для крафта' ) end else if v 'Липкий поршень' then v = 'Поршень' elseif v 'Любой гриб' or v 'Красный гриб' or v 'Коричневый гриб' then v = 'Гриб' elseif v 'Красный песок' then v = 'Песок' elseif v 'Древесный уголь' then v = 'Уголь' elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник' elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг' elseif v 'Кварцевый пилон' or v 'Резной кварцевый блок' then v = 'Кварцевый блок' else -- Объединить категории вариантов, описываемых на единой странице for _, variant in pairs( variants ) do if mw.ustring.find(v, ' ' .. variant .. '$' ) then v = variant break end end -- Убрать приставки for _, prefix in pairs( prefixes ) do if mw.ustring.find(v, '^' .. prefix .. ' ' ) then v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' ) break end end end table.insert( categories, 'Категория:' .. v .. ' как ингредиент для крафта' ) end end end end categories = table.concat( categories, '' ) end return header .. '\n' .. row .. '\n|-\n' .. footer .. categories end return p